Jag har trasslat med JSON under en tid, bara tryckt ut det som text och det har inte skadat någon (som jag känner till), men jag skulle vilja börja göra saker ordentligt. Jag har sett så många påstådda "standarder" för JSON-innehållstypen: ansökan / json applikation / x-javascript text / javascript text / x-javascript text / x-json Men vilken är korrekt eller bäst? Jag inser att det finns säkerhets- och webbläsarstödproblem som varierar mellan dem. Jag vet att det finns en liknande fråga, vilken MIME-typ om JSON returneras av ett REST API ?, men jag skulle vilja ha ett lite mer riktat svar.
2020-12-07 21:17:22
1 2 Nästa För JSON-text: ansökan / json MIME-medietypen för JSON-text är application / json. Standardkodningen är UTF-8. (Källa: RFC 4627). För JSONP (körbar JavaScript) med återuppringning: applikation / javascript Här är några blogginlägg som nämndes i relevanta kommentarer: Varför ska du inte använda text / html för JSON Internet Explorer har ibland problem med applikationen / json En ganska komplett lista med Mimetypes och vad man ska använda dem till Den officiella mime-typlistan på IANA från @ gnrfans svar nedan | IANA har registrerat den officiella MIME-typen för JSON som applikation / json. På frågan om varför inte text / json, verkar Crockford ha sagt att JSON inte egentligen är JavaScript eller text och att IANA var mer benägna att dela ut applikation / * än text / *. Fler resurser: Mediatyper Begäran om kommentarer 4627 bluesmoon: JSON har en typ | För JSON: Innehållstyp: applikation / json För JSON-P: Innehållstyp: applikation / javascript | Naturligtvis är rätt MIME-medietyp för JSON application / json, men det är nödvändigt att inse vilken typ av data som förväntas i din applikation. Till exempel använder jag Ext GWT och serversvaret måste gå som text / html men innehåller JSON-data. Klientsida, Ext GWT-formulärlyssnare uploadForm.getForm (). addListener (ny FormListenerAdapter () { @Åsidosätta public void onActionFailed (Formformulär, int httpStatus, String responseText) { MessageBox.alert ("Fel"); } @Åsidosätta public void onActionComplete (Formformulär, int httpStatus, String responseText) { MessageBox.alert ("Framgång"); } }); Om du använder applikation / json-svarstyp föreslår webbläsaren att jag sparar filen. Serversidan källkodavsnitt med hjälp av Spring MVC returnera nytt AbstractUrlBasedView () { @SuppressWarnings ("avmarkerad") @Åsidosätta skyddad tomrum renderMergedOutputModel (kartmodell, HttpServletRequest begäran, HttpServletResponse-svar) kastar undantag { response.setContentType ("text / html"); response.getWriter (). skriv (json); } }; | JSON: Svaret är dynamiskt genererad data, i enlighet med de frågeparametrar som skickas i URL: en. Exempel: {"Namn": "Foo", "Id": 1234, "Rank": 7} Innehållstyp: applikation / json JSON-P: JSON med stoppning. Svaret är JSON-data, med ett funktionssamtal lindat runt det. Exempel: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Innehållstyp: applikation / javascript | Om du använder Ubuntu eller Debian och du serverar .json-filer via Apache kanske du vill visa filerna med rätt innehållstyp. Jag gör detta främst för att jag vill använda Firefox-tillägget JSONView Apache-modulen mod_mime hjälper dig att göra det enkelt. Men med Ubuntu måste du redigera filen /etc/mime.types och lägga till raden ansökan / json json Starta sedan om Apache: sudo service apache2 starta om | Om du ringer till ASP.NET Web Services från klientsidan måste du använda application / json för att det ska fungera. Jag tror att detta är detsamma för jQuery och Ext-ramarna. | Rätt innehållstyp för JSON är application / json OM du inte använder JSONP, även känd som JSON with Padding, vilket faktiskt är JavaScript och så rätt innehållstyp skulle vara application / javascript. | Det råder ingen tvekan om att applikation / json är den bästa MIME-typen för ett JSON-svar. Men jag hade lite erfarenhet där jag var tvungen att använda applikation / x-javascript på grund av vissa komprimeringsproblem. Min värdmiljö är delad hosting med GoDaddy. De tillåter mig inte att ändra serverkonfigurationer. Jag hade lagt till följande kod i min web.config-fil för att komprimera svar.Genom att använda detta komprimerades .aspx-sidorna med g-zip men JSON-svar var inte. Jag har lagt till i sektionerna för statisk och dynamisk typ. Men detta komprimerar inte JSON-svar alls. Efter det tog jag bort den nyligen tillagda typen och lade till i både de statiska och dynamiska typavsnitten och ändrade svarstypen i .ashx (asynkron hanterare) till applikation / x-javascript Och nu upptäckte jag att mina JSON-svar komprimerades med g-zip. Så jag personligen rekommenderar att använda applikation / x-javascript bara om du vill komprimera dina JSON-svar på en delad värdmiljö. Eftersom i delad hosting tillåter de dig inte att ändra IISkonfigurationer. | Endast när jag använder application / json som MIME-typ har jag följande (från och med november 2011 med de senaste versionerna av Chrome, Firefox med Firebug): Inga fler varningar från Chrome när JSON laddas från servern. Firebug lägger till en flik i svaret som visar JSON-data formaterad. Om MIME-typen är annorlunda visas den bara som 'Svarinnehåll'. | Inte allt fungerar för innehållstypapplikation / json. Om du använder Ext JS-formuläret skicka för att ladda upp filen, tänk på att serversvaret analyseras av webbläsaren för att skapa dokumentet för